package com.zkt.oss.adapter;

import com.zkt.oss.entity.FileInfo;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;
import java.util.List;

/**
 * @author 赵开泰
 * @program jc-club
 * @date 2025/3/17 21:58
 * @description 文件存储适配器
 **/

public interface StorageAdapter {
	
	/**
	 * 创建bucket桶
	 *
	 * @param bucketName 桶名称
	 */
	void createBucket(String bucketName);
	
	/**
	 * 列出所有桶
	 *
	 * @return 所有桶名称
	 */
	List<String> getAllBuckets();
	
	/**
	 * 删除桶
	 *
	 * @param bucketName 桶名称
	 */
	void deleteBucket(String bucketName);
	
	/**
	 * 上传文件
	 *
	 * @param uploadFile 上传的文件
	 * @param bucketName 桶名称
	 * @param objectName 文件名
	 */
	void uploadFile(MultipartFile uploadFile, String bucketName, String objectName);
	
	/**
	 * 下载文件
	 *
	 * @param bucketName 桶名称
	 * @param objectName 文件名
	 * @return 文件输入流
	 */
	InputStream downloadFile(String bucketName, String objectName);
	
	/**
	 * 列出当前桶的文件
	 *
	 * @param bucketName 桶名称
	 * @return 文件列表
	 */
	List<FileInfo> getAllFile(String bucketName);
	
	/**
	 * 删除文件
	 *
	 * @param bucketName 桶名称
	 * @param objectName 文件名
	 */
	void deleteObject(String bucketName, String objectName);
	
	/**
	 * 获取文件的url地址
	 *
	 * @param bucket     桶名称
	 * @param objectName 文件名
	 * @return 文件url地址
	 */
	String getUrl(String bucket, String objectName);
}